import config from './config.js'

import Fly from 'flyio/dist/npm/wx'

import store from '@/store'
import cookie from '@/utils/cookie.js'
const fly = new Fly()


// 请求地址
fly.config.baseURL = config.baseURL + 'api'

// 默认参数
const defaultOpt = {
	login: true,
	headers: {
		'content-type': 'application/json'
	}
}


const baseRequest = async (options) => {

	// 从缓存中获取 token 防止 token 失效后还会继续请求的情况
	let token = cookie.get('token')

	// 打个锚点
	// DD友伴
	// token ='eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJzdWIiOiJsb2dpbl90b2tlbiIsImlhdCI6MTY5NzI5MTYxNiwiZXhwIjoxNjk3Mzc4MDE2fQ.3hSreUlrGRCQuzaZ-mp6qzc72dLVDGa2IOImePntteeEiow8WDW2Ow5JFc1vgBpO5mcZ9c_RcBzq0PHUFq9NVw'

	// 寻觅搭子
	// token = 'eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJzdWIiOiJsb2dpbl90b2tlbiIsImlhdCI6MTcwMTgzNTEyNCwiZXhwIjoxNzAxOTIxNTI0fQ.QSGnLcakPS262LY3TKiUfwdZZqRffLCP4Ahi9kIvP3GENih9Zcoh6wXo0ZMKxc5REwCjyFODTFdJAW0JOyGqIg'
	// token='eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJzdWIiOiJsb2dpbl90b2tlbiIsImlhdCI6MTcwMzc0NTk0NSwiZXhwIjoxNzAzODMyMzQ1fQ.LGMIarLJAGruWJkZY1JoRsyoP_B9RSDaNcbvUbz9RNunqtHEx5nQ2eeMzAzgweal7vr6pGo8zpwZWHnk_EJx6Q'
	
	if (token) {
		Object.assign(options.headers, {
			authorization: `Bearer ${token}`
		})
	}


	const {
		url,
		params,
		data,
		...option
	} = options

	// 提示
	uni.showLoading({
		title: '加载中'
	});



	// // 小程序端，如果没登录不允许进入任何页面，所以我在请求发起前判断是否登录，如果没登录就只能回到登录页
	// if (url !== '/anon/auth/login' && url !== '/anon/index/serviceUrl') {
	// 	if (token === "") {

	// 	}
	// }




	return fly.request(url, params || data, {
			...option
		})

		// 请求成功
		.then((res) => {

			if (res.status === 200) {

				// 如果不是code不是200提示
				if (res.data?.code !== 200) {
					if (res.data.msg === null) {
						uni.showToast({
							title: '系统异常，请联系客服',
							duration: 3000,
							icon: 'none'
						})
						return
					}
					uni.showToast({
						title: res.data.msg,
						duration: 3000,
						icon: 'none'
					})
				}

				// 如果返回code是401就返回登录页
				if (res.data?.code === 401) {
					store.commit('handleExit')
					uni.switchTab({
						url: '/pages/my/index'
					})
				}

				return Promise.resolve(res.data)
			} else {
				Promise.reject(res)
			}

		})

		// 请求失败
		.catch(err => {
			console.error('定位问题-接口报错信息error：', err)
			Promise.reject(!err || !err.response ? {
				error: '请求失败'
			} : err.response.data)
		})

		// 无论请求结果是什么
		.finally(() => {
			// 关闭提示
			uni.hideLoading();
		});
}

const request = ['post', 'put', 'patch', 'get', 'delete', 'head'].reduce((request, method) => {
	/**
	 * @param url string 接口地址
	 * @param data object 接口参数
	 * @param option object axios 配置项
	 * @returns {AxiosPromise}
	 */
	request[method] = (url, data = {}, option = {}) => baseRequest({
		url,
		data,
		method,
		...defaultOpt,
		...option
	})

	return request
}, {})

export default request